home *** CD-ROM | disk | FTP | other *** search
/ Resource for Source: C/C++ / Resource for Source - C-C++.iso / misc_src / cslib16b / include / csvbase.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-11-01  |  5.5 KB  |  184 lines

  1. /***********************************************************************
  2.  
  3.                                       CSDB Library, Version 1.6.b 
  4.                                          Released: March 2nd 1995 
  5.  
  6.        Header file of the VBASE class.
  7.        Database class for records with variable length.
  8.  
  9.                                            Copyright(c) 1994,1995 
  10.                                                            Combis 
  11.                                                   The Netherlands 
  12. ***********************************************************************/
  13.  
  14. #ifndef __CSVBASE_H
  15. #define __CSVBASE_H
  16.  
  17. #include "cstypes.h"
  18. #include "cspage.h"
  19. #include "cstaba.h"
  20.  
  21.  
  22. typedef U32 VBPO;
  23. typedef U32 PANR;
  24. typedef U16 OFNR;
  25.  
  26. class VBASE: public PAGE
  27. {
  28.  
  29.  private:
  30.  
  31.  
  32.    typedef struct
  33.    {
  34.      VBPO pos;
  35.    } vbi;          //VBase Index
  36.  
  37.    typedef struct
  38.    {
  39.      unsigned length: 15;
  40.      unsigned delet:   1;
  41.      U16 alloc;
  42.    } dhd;          //Data HeaDer
  43.  
  44.    typedef struct
  45.    {
  46.      VBPO   pos;
  47.      S16    alloc;
  48.    } edc;          //Empty Data Chain
  49.  
  50.  
  51. protected:
  52.  
  53.    TABLEa vpi;         // Virtual Page Index.
  54.    ARRAY  vpi_cut;     // Virtual Page Index short CUT.
  55.  
  56.    U16      ipp;         // Indexes Per Page.
  57.    U16      ipp_offmask;
  58.    U16      ipp_shftrig;
  59.    U16      nip;         // Number of pages currently used by the index.
  60.  
  61.    U16      pag_s;     // Page Shift.
  62.    U16      pag_o;     // Page OR.
  63.  
  64.    edc     *eda;         // Empty Data Array
  65.    U16      esr;         // Eda Shift Right
  66.    U16      enr;         // Eda NumbeR
  67.    int      epc;         // Eda Page Changed.
  68.  
  69.    U32      numrec;     // Number of records.
  70.    U16      maxrlen;     // Max Record Length.
  71.  
  72.    int      rel_shrink;     // Relocate record when shrunk.
  73.  
  74.    void   init_vpi(void);
  75.    void   init_eca(void);
  76.    void   init_vars(void);
  77.    void   init_defaults(void);
  78.    void   save_vpi(void);
  79.    void   close_vpi(void);
  80.    void   save_eca(void);
  81.    void   close_eca(void);
  82.    void   reset_vpi(void);
  83.    void   reset_eca(void);
  84.  
  85.    U32      pag(VBPO &p)            { return p>>pag_s;        }
  86.    U16      off(VBPO &p)            { return p&pag_o;        }
  87.    VBPO   vbpo(PANR &p,OFNR &of)    { return (p<<pag_s)|of; }
  88.  
  89.    CSCHAR   *pos_poa(PANR p,OFNR of)  { return load_page(p)+of;    }
  90.    CSCHAR   *pos_poda(PANR p,OFNR of) { return load_page_d(p)+of; }
  91.    CSCHAR   *pos_poa(VBPO  p)        { return pos_poa(pag(p),off(p));  }
  92.    CSCHAR   *pos_poz(VBPO  p)        { return pos_poa(p)+sizeof(dhd);  }
  93.    CSCHAR   *pos_poda(VBPO  p)        { return pos_poda(pag(p),off(p)); }
  94.    CSCHAR   *pos_podz(VBPO  p)        { return pos_poda(p)+sizeof(dhd); }
  95.  
  96.  
  97.    dhd     *DH(void *p) { return (dhd *)p; }
  98.  
  99.    VBPO   p2i(U32 rec);
  100.    void   p2i(U32 rec,VBPO pos);
  101.  
  102.    int      is_index_page(PANR p);
  103.  
  104.    U16      data_alloc(U16 amount,PANR &page,OFNR &offset,void *&ptr);
  105.    void   data_free(void *ptr,PANR page,OFNR  offset,U16 amount);
  106.    U16      data_alloc_full(U16 amount,PANR &page,OFNR &offset,void *&ptr);
  107.  
  108.    void   sort_eca(void);
  109.    void   set_num_page(PANR n);
  110.    int      max_buf_locked(void )     { return 4; }
  111.    void   numvrec(U32 l)        { numrec=l; }
  112.  
  113.    void   head2vars(void);
  114.    void   vars2head(void);
  115.  
  116.    virtual void check_id(U32 id);
  117.    virtual void set_id(void);
  118.  
  119. ////////////////////////////////////////////////////////////////////////
  120. ////////////////////// PUBLIC FUNCTIONS////////////////////////////////
  121. ////////////////////////////////////////////////////////////////////////
  122.  public:
  123.  
  124.    VBASE(void);
  125.    ~VBASE(void);
  126.  
  127.  
  128. //////////////////////// Definition//////////////////////////////////////////
  129.    int    define(CSCHAR *name,U16 struclen);
  130.    void relocate_when_shrunk(int TrueOrFalse);
  131.  
  132. //////////////////////// Open & Close////////////////////////////////////////
  133.    int    open(CSCHAR *name,U16 kb_buf);
  134.    int    close(void);
  135.    int    save(void);
  136.  
  137. //////////////////////// Locate, Read & Writes records///////////////////////
  138.    void read_rec(U32 pos,void *ptr,U16    &length);
  139.    void read_rec(U32 pos,U16  maxlen,void *ptr,U16  &length);
  140.    void write_rec(U32 i,void *d,U16 len);
  141.    CSCHAR *locate(U32 k)         { return pos_podz(p2i(k)); }
  142.  
  143. //////////////////////// Add Records/////////////////////////////////////////
  144.    U32    append_rec(void *p,U16 len);
  145.  
  146. //////////////////////// Number of Records///////////////////////////////////
  147.    U32    numvrec(void)         { return numrec; }
  148.  
  149. //////////////////////// Data in Header Page/////////////////////////////////
  150. /* Inherited
  151.    int    data_2_header(void * ptr,U16 length);
  152.    int    header_2_data(void * ptr,U16 length);
  153.    U16    max_data_in_header(void);
  154. */
  155.  
  156. ////////////////////////// Deleting////////////////////////////////////////////
  157.    int    is_delet(U32 k)      { return !DH(pos_poa(p2i(k)))->delet; }
  158.    void delet(U32 k)         { DH(pos_poda(p2i(k)))->delet=0;    }
  159.    void undelet(U32 k )      { DH(pos_poda(p2i(k)))->delet=1;    }
  160.  
  161. ////////////////////////// Record Length///////////////////////////////////////
  162.    U16    rec_len(U32 k)         { return DH(pos_poa(p2i(k)))->length; }
  163.    U16    max_len(void)         { return maxrlen; }
  164.  
  165. //////////////////////// Report Writing//////////////////////////////////////
  166.    U16    report(CSCHAR *name,S16 sub=1);
  167.    void report(FILE *fipo,S16 sub);
  168.  
  169. ////////////////////////// Miscellaneous///////////////////////////////////////
  170. /* Inherited
  171.    int    background(void)
  172. */
  173.    int    pack(void);
  174.    int    zap(void);
  175.    void empty(void);
  176.    void info(void);
  177.    int    relocate_when_shrunk(void) { return rel_shrink; }
  178.    virtual int class_ID(void)  { return CS_CLID_VBASE; }
  179.  
  180.  
  181. };
  182.  
  183. #endif
  184.